home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 4490 / 4490.xpi / components / scripts / lib-webupdate.js < prev    next >
Text File  |  2010-01-13  |  4KB  |  136 lines

  1. /***********************************************************
  2. Library - Web Update
  3.   
  4.   Notify web site update.
  5.  
  6.   @ver 0.2
  7. ***********************************************************/
  8. var DB_FILE_NAME = "wmn/wudata.txt";
  9.  
  10. WebMailNotifier.prototype.loadDBFile=function(name){
  11.   var str=WebMailNotifier.prototype.loadFile(name);
  12.   str=str.split("\r\n");
  13.   var data={};
  14.   for(var i=0;i<str.length-1;i+=2){
  15.     data[str[i]]=str[i+1].replace(/\\n/g,"\n").replace(/\\r/g,"\r");;
  16.   }
  17.   return data;
  18. }
  19.  
  20. WebMailNotifier.prototype.saveDBFile=function(name,data){
  21.   var str="";
  22.   for(i in data) {
  23.     str+=i+"\r\n";
  24.     var d=data[i];
  25.     if(!d)d="";
  26.     d=d.replace(/\r/g,"\\r").replace(/\n/g,"\\n");
  27.     str+=d+"\r\n";
  28.   }
  29.   WebMailNotifier.prototype.saveFile(name,str);
  30. }
  31. WebMailNotifier.prototype.wuGetVal=function(id,user,num){
  32.   if(!this.fileDB){
  33.     this.fileDB=this.loadDBFile(DB_FILE_NAME);
  34.   }
  35.   return this.fileDB[id+"\t"+user+"\t"+num];
  36. }
  37. WebMailNotifier.prototype.wuSetVal=function(id,user,num,val){
  38.   if(!this.fileDB){
  39.     this.fileDB=this.loadDBFile(DB_FILE_NAME);
  40.   }
  41.   this.fileDB[id+"\t"+user+"\t"+num]=val.toString();
  42.   this.saveDBFile(DB_FILE_NAME,this.fileDB);
  43. }
  44. WebMailNotifier.prototype.wuCompare=function(obj){
  45.   if(!this.fileDB){
  46.     this.fileDB=this.loadDBFile(DB_FILE_NAME);
  47.   }
  48.   var fnd=obj.findString(obj.data);
  49.   if(fnd){
  50.     var key=obj.id+"\t"+obj.user;
  51.     var db=this.fileDB;
  52.     if(db[key+"\t0"]){
  53.       for(var i=0;i<obj.cache;++i){
  54.         if(db[key+"\t"+i]==fnd)return 0;
  55.       }
  56.       //no match
  57.       obj.newData=fnd;
  58.       return 1;
  59.     }else{
  60.       for(var i=0;i<obj.cache;++i){
  61.         db[key+"\t"+i]=fnd;
  62.       }
  63.       this.saveDBFile(DB_FILE_NAME,this.fileDB);
  64.       return 0;
  65.     }
  66.   }else{
  67.     return -1;
  68.   }
  69. }
  70. WebMailNotifier.prototype.wuCheckUpdate=function(obj){
  71.   if(obj.newData){
  72.     var db=this.fileDB;
  73.     for(var i=obj.cache-1;i>0;--i){
  74.       db[obj.id+"\t"+obj.user+"\t"+i]=db[obj.id+"\t"+obj.user+"\t"+(i-1)];
  75.     }
  76.     db[obj.id+"\t"+obj.user+"\t0"]=obj.newData;
  77.     obj.newData=null;
  78.     this.saveDBFile(DB_FILE_NAME,db);
  79.     obj.mailCount=0;
  80.     if(!this.newMailsOnly){
  81.       obj.mailData.desc=obj.getDesc();    
  82.       this.setState(nsIWebMailNotifier.ST_MAILDATA,obj.ind);
  83.     }
  84.     return true;
  85.   }
  86.   return false;
  87. }
  88.  
  89. function initUpdateHandler(handler){
  90.   handler.cache=1;
  91.   handler.initStage=ST_DATA;
  92.   handler.start="";
  93.   handler.capture="[\\s\\S]+";
  94.   handler.end="";
  95.   handler.timerMultiplier=3;
  96.   handler.getCount=function(aData){
  97.      return this.main.wuCompare(this);
  98.   };
  99.   handler.calcCount=function(){
  100.      return this.mailCount;
  101.   };  
  102.   handler.process=function (aHttpChannel, aData) {
  103.     switch(this.stage){
  104.     case ST_LOGIN_RES:
  105.       this.stage=ST_DATA;
  106.     case ST_DATA:
  107.       if(this.runCount%this.timerMultiplier==0){
  108.         ++this.runCount;
  109.         break;
  110.       }else{
  111.         ++this.runCount;
  112.         this.main.setState(nsIWebMailNotifier.ST_MAILDATA,this.ind);
  113.         return true;
  114.       }
  115.     }
  116.     return WebMailHandler.prototype.process.call(this,aHttpChannel, aData);
  117.   };
  118.  
  119.   handler.getMailURL=function(){
  120.     this.main.wuCheckUpdate(this);
  121.     return this.mailURL;
  122.   }
  123.  
  124.   handler.getDesc = function(){
  125.     var aData=this.mailCount;
  126.     return aData>0?"!":(aData==0?"=":"");
  127.   }    
  128.   if(!handler.findString){
  129.     handler.findString=function(aData){
  130.       var reg=new RegExp(this.start+"("+this.capture+")"+this.end);
  131.       var fnd=aData.match(reg);
  132.       return fnd?fnd[1]:null;
  133.     }
  134.   }
  135. }
  136.